/**
 * animate 当元素的多个属性同时缓动到指定目标
 * @param {element} dom 要缓动的元素节点
 * @param {object} target 目标值的集合
 * @param {function} fn 运动完成的回调函数
 */
function animate(dom,target,fn){
    clearInterval(dom.timer)
    dom.timer =setInterval(function(){
        var flag = true;

        for(var attr in target){
            // attr运动
            // 1 获取当前的位置
            if(attr=="opacity"){
                var current = parseInt(getStyle(dom,attr)*100)
            }else{
                var current = parseInt(getStyle(dom,attr))
            }
            // 2 计算速度
            var speed =(target[attr] - current) /10
            speed = speed>0?Math.ceil(speed):Math.floor(speed);
            // 3 计算下一个位置
            var next = current + speed;
            // 4 定位
            if(attr=="opacity"){
                dom.style.opacity = next/100;
                dom.style.filter = "alpha(opacity="+next+")"
            }else if(attr=="zIndex"){
                next = target[attr];
                dom.style.zIndex = next;
            }else{
                dom.style[attr] = next+"px";
            }

            if(next!=target[attr]){
                flag = false;
            }
        }

        if(flag){
            clearInterval(dom.timer)
            if(fn){
                fn()
            }
        }

    },30)
}
/**
 * move 元素单属性缓动
 * @param {element} dom 要缓动的元素节点
 * @param {string} attr 要缓动的属性
 * @param {number} target 缓动到的目标，如果是透明度要乘以100
 * @param {function} fn  缓动完成的回调函数，可选参数
 */
function move(dom,attr,target,fn){
    clearInterval(dom.timer);
    dom.timer =setInterval(function(){
        // 1 获取当前位置
        if(attr=="opacity"){
            var current = parseInt(getStyle(dom,attr)*100);
        }else{
            var current = parseInt(getStyle(dom,attr));
        }
        // 2 计算速度
        var speed = (target - current)/10;
        speed = speed>0?Math.ceil(speed):Math.floor(speed);
        // 3 计算下一个位置
        var next = current + speed;
        // 4 定位元素
        if(attr=="opacity"){
            dom.style.opacity = next/100;
            dom.style.filter = "alpha(opacity="+next+")";
        }
        else if(attr == "zIndex"){
            next = target;
            dom.style.zIndex = next;
        }
        else{
            dom.style[attr] = next+"px";
        }
        if(next==target){
            clearInterval(dom.timer)
            if(fn){
                fn()
            }
            
        }
    },20)
}
/**
 * trim 返回字符串去除前后空格的结果
 * @param {string} str 要处理空格的字符串
 */
function trim(str){
    return str.replace(/(^\s+)|(\s+$)/g,"")
}

/**
 * getStyle 返回指向元素的某个样式值
 * @param {element} dom 需要传入一个元素节点
 * @param {string} attr 你要获取的样式的名称
 */
function getStyle(dom,attr){
    // var dom = document.getElementById('box');
    // var attr = 'opacity';
    // 先判断是否是标准浏览器
    if(window.getComputedStyle){
        // 标准浏览器
        return window.getComputedStyle(dom,null)[attr]
    }else{
        // IE低版本浏览器
        return dom.currentStyle[attr]
    }
}

/**
 * getScroll 获取滚动距离，返回一个对象
 */ 
function getScroll(){
    return {
        top:window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop,
        left:window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft
    }
}

/**
 * diff 计算时间差
 * @param {string} str 传入一个表示日期的字符串
 */
function diff(str){
    var now = new Date();
    var future = new Date(str)
    var difference = parseInt((future - now)/1000); 
    var day = parseInt(difference/(24*60*60));
    difference = difference - 24*60*60*day;
    var hour = Math.floor(difference/3600) ;
    difference = difference - hour*3600;
    var minute = Math.floor(difference/60);
    var second = difference - minute*60;
    return day+'天'+hour+'小时'+minute+'分'+second+'秒';
}

/**
 * getColor 返回十六进制的随机颜色
 */
function getColor(){
    var str = "#"
    for(var i=0;i<6;i++){
        var num = parseInt(Math.random()*16);
        str += num.toString(16)
    }
    return str;
}
/**
 * rand 返回m到n之间的随机数
 */
function rand(m,n){
    if(m>n){
        var temp = m;
        m = n;
        n = temp;
    }
    return parseInt(m + Math.random()*(n-m+1))
}